package collections.list;

import java.util.List;

import static collections.list.TestHighSpeedNumberOrderUtils.generateNumber;

/**
 * 作业1：写出快速排序的思路来
 * 作业2：给出一个集合，找出某个数字的下标（index 索引）出来
 * 作业3：将二分法的算法实现
 */
public class FindNumberUtils {
    private static List<Integer> numberListd = null;

    /**
     *   static的方法是静态方法，在所有的类中最先初始化
     *   最优先初始化静态代码块
     *   这个东西就叫静态代码快
     */
    static {
        //预先要生成100个随机数的集合
        numberListd = generateNumber(100);
        numberListd.stream().forEach(e -> System.out.print(e + ","));
    }

    /**
     * long startTime1 = System.nanoTime();
     * long endime1 = System.nanoTime();
     * System.out.println("快速排序花费的时间："+(endime1-startTime1)/1000);
     * contaion container
     * @param args
     */

    public static void main(String[] args) {
        long startTime2 = System.nanoTime();
        System.out.println();
        System.out.println("排序前：");
        //我想找一找 这个随机集合里面有没有100这个数字
        //有的话，把这个数字的下表 index拿出来
        int nums=30;
        for (int i = 0; i < numberListd.size(); i++) {
            if (numberListd.get(i) == nums) {
                System.out.println("下标索引：" + i + "，数字为：" + numberListd.get(i));
            }
        }
        long endime1 = System.nanoTime();
        System.out.println("没有排序花费的时间：" + (endime1 - startTime2));

        CcollectionUtils utils = new CcollectionUtils();
        List<Integer> integers = utils.quickOrderNumber(numberListd);
        System.out.println("排序后：");
        integers.stream().forEach(e -> System.out.print(e + ","));
        System.out.println();

        long starttime1 = System.nanoTime();
        utils.binarySearch(integers,nums);
        long starttime2 = System.nanoTime();
        System.out.println("二分排序花费的时间："+(starttime2-starttime1));

    }



}
